package busterminal.persistence.jdbc.proxy;

import busterminal.entity.StoppingPoint;
import busterminal.persistence.StoppingPointDAO;
import busterminal.services.ServiceLocator;

/**
 * Класс - заместитель остановочного пункта
 */
public class StoppingPointProxy implements StoppingPoint {

    /**
     * Идентификатор объекта в базе данных
     */
    private int id;
    /**
     * Proxy-объект остановочного пункта
     */
    private StoppingPoint proxyObject;

    /**
     * Конструктор по умолчанию
     */
    public StoppingPointProxy() {
    }

    /**
     * Получить proxy-объект: если он не загружен, то загрузить и получить
     * @return proxy-объект
     */
    private StoppingPoint getProxy() {
        if (proxyObject == null) {
            proxyObject = ServiceLocator.getService(StoppingPointDAO.class).read(id);
        }
        return proxyObject;
    }

    /**
     * Получить идентификатор
     * @return идентификатор
     */
    @Override
    public Integer getId() {
        return id;
    }

    /**
     * Установить идентификатор
     * @param id идентификатор
     */
    @Override
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Получить название остановочного пункта
     * @return название остановочного пункта
     */
    @Override
    public String getStoppingPointName() {
        return getProxy().getStoppingPointName();
    }

    /**
     * Установить название остановочного пункта
     * @param stoppingPointName название остановочного пункта
     */
    @Override
    public void setStoppingPointName(String stoppingPointName) {
        getProxy().setStoppingPointName(stoppingPointName);
    }

    /**
     * Метод, возвращающий текстовое представление объекта
     * @return текстовое представление объекта
     */
    @Override
    public String toString() {
        return "StoppingPointProxy{" + "id=" + id + ", proxyObject=" + getProxy() + '}';
    }
}
